<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>3.3. Men&uacute; de una aplicaci&oacute;n</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="ch03.html" title="Cap&iacute;tulo 3. Elementos b&aacute;sicos">
      <link rel="prev" href="ch03s02.html" title="3.2. Breve gu&iacute;a para crear una pantalla">
      <link rel="next" href="ch03s04.html" title="3.4. Dise&ntilde;o de pantalla con smarty/plugins">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">3.3. Men&uacute; de una aplicaci&oacute;n</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Cap&iacute;tulo 3. Elementos b&aacute;sicos</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="section" title="3.3. Men&uacute; de una aplicaci&oacute;n">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title" style="clear: both"><a name="d4e1414"></a>3.3. Men&uacute; de una aplicaci&oacute;n
                  </h2>
               </div>
            </div>
         </div>
             
         
             
         <div class="section" title="3.3.1. Funcionamiento del men&uacute;">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a name="d4e1416"></a>3.3.1. Funcionamiento del men&uacute;
                     </h3>
                  </div>
               </div>
            </div>
                  
            
                  
            <p>La pantalla de inicio de la aplicaci&oacute;n est&aacute; formada por tres
               partes, y cada una de ellas se define, de izquierda a derecha, en los
               ficheros menuModulos.xml, menuHerramientas.xml y menuAdministracion.xml
               que est&aacute;n en la carpeta include de la aplicaci&oacute;n. Las tres siguen la
                     misma sintaxis y tienen las mismas opciones, que veremos a continuaci&oacute;n.
                     A continuaci&oacute;n tenemos un ejemplo:
            </p>
            
                  
            <div class="mediaobject"><img src="images/guia_pant_inicial.jpg"></div>
            
                  
            <p>El plugin CWPantallaEntrada, lee los tres ficheros para crear la
                     pantalla de inicio. El objetivo de cada fichero es:
            </p>
            
                  
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>menuModulos.xml</strong></span>: Define la
                                  jerarqu&iacute;a de m&oacute;dulos y opciones de la aplicaci&oacute;n, que se utilizar&aacute;
                                  tanto en la pantalla principal como en el men&uacute; desplegable de las
                                  ventanas.
                     </p>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>menuHerramientas.xml</strong></span>: Lista
                                  de herramientas disponibles para esta aplicaci&oacute;n.
                     </p>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>menuAdministracion.xml</strong></span>:
                                  Define las herramientas para la administraci&oacute;n de la
                                  aplicaci&oacute;n.
                     </p>
                             
                  </li>
               </ul>
            </div>
            
                  
            <p>Cada uno de estos ficheros tiene una DTD con la que se define la
                     estructura de ese bloque de men&uacute;s en la pantalla entrada. La primera
                     etiqueta que hay que definir es <span class="bold"><strong>&lt;menu&gt;&lt;/menu&gt;</strong></span>, esta etiqueta ser&aacute; un
                     bloque que englobar&aacute; todo lo que definamos para ese bloque (m&oacute;dulos,
                     herramientas o administraci&oacute;n).
            </p>
            
                  
            <p>La aplicacion puede dividirse en m&oacute;dulos, etiqueta &lt;<span class="bold"><strong>modulo</strong></span>&gt;, aunque normalmente s&oacute;lo lo har&aacute;n
                     aquellas de tama&ntilde;o grande; una aplicacion de tama&ntilde;o mediano o peque&ntilde;o
                     constar&aacute; de un s&oacute;lo m&oacute;dulo. Dentro de cada m&oacute;dulo pueden aparecer tanto
                     ramas, etiqueta &lt;<span class="bold"><strong>rama</strong></span>&gt;, como
                     opciones, etiqueta &lt;<span class="bold"><strong>opcion</strong></span>&gt;; las
                     ramas expresan submen&uacute;s y las opciones son las hojas o elementos que se
                     asocian con una acci&oacute;n o pantalla.
            </p>
            
                  
            <p>La etiqueta &lt;<span class="bold"><strong>controlAcceso</strong></span>&gt;
                     sirve para controlar que partes de la aplicaci&oacute;n son visibles o no, en
                     funci&oacute;n del rol o de los m&oacute;dulos asignados al usuario (esa informaci&oacute;n
                     se extrae de la clase IgepSession a trav&eacute;s de la sesion). Si este nodo
                     no aparece, cualquier usuario validado podr&aacute; acceder. Este nodo debe ser
                     siempre el primer hijo del nodo al que quiera asociarse (N&Oacute;TESE que en
                     el caso de opcion, debe reconvertirse la etiqueta XML y ser necesario
                     una de apertura y otra de cierre).
            </p>
            
                  
            <p>A continuaci&oacute;n se relacionan el conjunto de etiquetas utilizadas
                     son:
            </p>
            
                  
            <p>La im&aacute;genes que pueden aparecer asociadas a una opci&oacute;n del men&uacute; se
                     encuentran ubicadas en el directorio images/menu que debemos tener en el
                     custom que hayamos definido para nuestra aplicaci&oacute;n.
            </p>
            
                  
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;menu&gt;...&lt;/menu&gt;</strong></span></p>
                     
                               
                     <p>Agrupaci&oacute;n de m&oacute;dulos. S&oacute;lo se pueden poner a primer
                                  nivel.
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>aplicacion</strong></span>: Nombre de la
                                               aplicaci&oacute;n.
                              </p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>titulo</strong></span>: T&iacute;tulo que
                                               aparecer&aacute; en la cabecera del bloque correspondiente.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
               </ul>
            </div>
            
                  
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;modulo&gt;...&lt;/modulo&gt;</strong></span></p>
                     
                               
                     <p>Agrupaci&oacute;n de opciones y ramas. S&oacute;lo se pueden poner a primer
                                  nivel.
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>titulo</strong></span>: T&iacute;tulo de la
                                               opci&oacute;n, ser&aacute; la cadena presentada en el menu y en la pantalla
                                               principal.
                              </p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>descripcion</strong></span>: Se
                                               corresponde con la cadena que se muestra en el men&uacute; cuando
                                               detenemos el cursor encima.
                              </p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>imagen</strong></span>: (Opcional) Imagen
                                               asociada en el men&uacute;. Ser&aacute; una ruta relativa a un fichero gr&aacute;fico
                                               en la carpeta igep/images. Si instanciamos el par&aacute;metro,
                                               deberemos comprobar que la imagen existe. Si no especificamos la
                                               imagen para el m&oacute;dulo, por defecto se utilizar&aacute; la siguiente
                                               imagen <span class="inlinemediaobject"><img src="images/menu.gif"></span></p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
               </ul>
            </div>
            
                  
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;rama&gt;...&lt;/rama&gt;</strong></span></p>
                     
                               
                     <p>Opci&oacute;n dentro de un m&oacute;dulo que contiene opciones o m&aacute;s
                                  ramas
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>titulo</strong></span>: T&iacute;tulo de la
                                               opci&oacute;n, ser&aacute; la cadena presentada en el menu y en la pantalla
                                               principal.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>descripcion</strong></span>: Se
                                               corresponde con la cadena que se muestra en el men&uacute; cuando
                                               detenemos el cursor encima.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>imagen</strong></span>: (Opcional) Imagen
                                               asociada en el men&uacute;. Ser&aacute; una ruta relativa a un fichero gr&aacute;fico
                                               en la carpeta igep/images. Si instanciamos el par&aacute;metro,
                                               deberemos comprobar que la imagen existe. Si no especificamos
                                               este par&aacute;metro por defecto se utilizar&aacute; la siguiente imagen
                                               <span class="inlinemediaobject"><img src="images/menu.gif"></span></p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;opcion /&gt;</strong></span></p>
                     
                               
                     <p>Opci&oacute;n que ya enlazar&aacute; con la ventana correspondiente. N&Oacute;TESE
                                  que en el caso de que se quiera control de acceso debe reconvertirse
                                  la etiqueta XML y ser necesario una de apertura y otra de cierre
                                  (&lt;opcion&gt;&lt;controlAcceso&gt;...&lt;/controlAcceso&gt;&lt;/opcion&gt;)
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>titulo</strong></span>: T&iacute;tulo de la
                                               opci&oacute;n, ser&aacute; la cadena presentada en el men&uacute; y en la pantalla
                                               principal.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>descripcion</strong></span>: Se
                                               corresponde con la cadena que se muestra en el men&uacute; cuando
                                               detenemos el cursor encima.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>imagen</strong></span>: (Opcional) Imagen
                                               asociada en el men&uacute;. Ser&aacute; una ruta relativa a un fichero gr&aacute;fico
                                               en la carpeta igep/images. Si instanciamos el par&aacute;metro,
                                               deberemos comprobar que la imagen existe. Si no especificamos la
                                               imagen para la opci&oacute;n por defecto se utilizar&aacute; la siguiente
                                               imagen <span class="inlinemediaobject"><img src="images/menu.gif"></span></p>
                                          
                           </li>
                        </ul>
                     </div>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>url</strong></span>: Indicaremos la clase
                                               PHP encargada de manejar la opci&oacute;n (se a&ntilde;ade internamente la
                                               cadena view).
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>ventana</strong></span>: Par&aacute;metro que
                                               utilizaremos cuando queramos que la url se nos abra en una
                                               ventana diferente de la aplicaci&oacute;n, pondremos ventana="true". Si
                                               no aparece se abrir&aacute; en la misma ventana de la
                                               aplicaci&oacute;n.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;controlAcceso&gt;...&lt;/controlAcceso&gt;</strong></span></p>
                     
                               
                     <p>Bloque para definir los roles y m&oacute;dulos de usuarios. Aparecer&aacute;
                                  inmediatamente despu&eacute;s del m&oacute;dulo, rama u opci&oacute;n que haya que
                                  controlar.
                     </p>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;rolPermitido&gt;</strong></span></p>
                     
                               
                     <p>Define el rol para acceder al nodo. Se hace uso de tantas
                                  etiquetas &lt;rolPermitido&gt; como roles puedan acceder a ese
                                  nodo.
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>valor</strong></span>: Identificador del
                                               rol
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>&lt;moduloPermitido&gt;</strong></span></p>
                     
                               
                     <p>M&oacute;dulo de acceso. No tiene nada que ver con la etiqueta m&oacute;dulo
                                  que se ha definido antes, y que sirve para agrupar las opciones en
                                  la aplicaci&oacute;n.
                     </p>
                     
                               
                     <p><span class="emphasis"><em>&lt;moduloPermitido /&gt; </em></span> Pueden imitar
                                  el comportamiento de los roles o ser m&aacute;s restrictivos. Si s&oacute;lo se
                                  especifica el m&oacute;dulo, los usuarios que lo tengan asignado podr&aacute;n
                                  acceder.
                     </p>
                     
                               
                     <p><span class="emphasis"><em>&lt;moduloPermitido&gt;...&lt;/moduloPermitido&gt;</em></span>
                                  Si adem&aacute;s se especifica una lista de valores, se comprobar&aacute; si el
                                  usuario tiene asignado un m&oacute;dulo, y si lo tiene, el valor del mismo
                                  debe aparecer entre los especificados en la etiqueta
                                  &lt;valorModulo&gt; .
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>id</strong></span>: Identificador del
                                               m&oacute;dulo
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
                  <li class="listitem">
                               
                     <p>&lt;<span class="bold"><strong>valorModulo</strong></span>&gt;
                     </p>
                     
                               
                     <p>Aparecer&aacute; una etiqueta por cada valor al que se le dar&aacute; acceso
                                  a la opci&oacute;n.
                     </p>
                     
                               
                     <p>Atributos:</p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="circle">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>valor</strong></span>: valor del
                                               m&oacute;dulo
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </li>
               </ul>
            </div>
            
                  
            <div class="section" title="3.3.1.1. Ejemplo con el fichero completo">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1559"></a>3.3.1.1. Ejemplo con el fichero completo
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <div class="informalexample">
                            <pre class="programlisting">&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;    

&lt;menu aplicacion="nombreAplicacion"&gt;

    &lt;modulo id="1" titulo="modulo Uno" imagen="menu.gif"&gt;
        &lt;controlAcceso&gt;
            &lt;rolPermitido valor="INFORMATICO"/&gt;
            &lt;rolPermitido valor="SUPERNENA"/&gt;
            &lt;rolPermitido valor="MIEMBROIGEP"/&gt;
            &lt;moduloPermitido id="P_TRAMITA" /&gt;
            &lt;moduloPermitido id="david"&gt;
                &lt;valorModulo valor=" " /&gt;
            &lt;/moduloPermitido&gt;
            &lt;moduloPermitido id="DIASEMANA"&gt;
                &lt;valorModulo valor="LUNES" /&gt;
                &lt;valorModulo valor="MARTES" /&gt;
            &lt;/moduloPermitido&gt;
        &lt;/controlAcceso&gt;
        &lt;opcion imagen="menu.gif" titulo="tOpcion1.1" descripcion="dOpcion1.1" url="URLOpcion1-1.php" /&gt;
        &lt;opcion imagen="menu.gif" titulo="tOpcion1.2" descripcion="dOpcion1.1" url="URLOpcion1-1.php" /&gt;
        &lt;rama titulo="ramaL2" id="r2"&gt;
            &lt;opcion imagen="menu.gif" titulo="tOpcion2.1" descripcion="dOpcion2.1" url="URLOpcion2-1.php"&gt;
            &lt;/opcion&gt;
            &lt;opcion imagen="menu.gif" titulo="tOpcion2.2" descripcion="dOpcion2.2" url="URLOpcion2-1.php"/&gt;
            &lt;rama titulo="ramaL3" id="r3"&gt;
                &lt;opcion imagen="menu.gif" titulo="tOpcion3.1" descripcion="dOpcion3.1" url="URLOpcion3-1.php" /&gt;
                &lt;/opcion&gt;
            &lt;/rama&gt;
        &lt;/rama&gt;
        &lt;opcion imagen="menu.gif" titulo="tOpcion1.4" descripcion="dOpcion1.4" url="http://www.google.es" /&gt;
    &lt;/modulo&gt;

    &lt;modulo id="2" titulo="modulo Segundo" imagen="menu.gif"&gt;
        &lt;opcion imagen="menu.gif" titulo="tOpcion1.1" descripcion="dOpcion1.1" url="URLOpcion1-1.php" /&gt;
        &lt;rama titulo="ramaL2" id="r2"&gt;
            &lt;opcion imagen="menu.gif" titulo="tOpcion2.1" descripcion="dOpcion2.1" url="URLOpcion2-1.php"&gt;
                &lt;controlAcceso&gt;
                   &lt;rolPermitido id="INFORMATICO"/&gt;
                   &lt;moduloPermitido id="P_TRAMITA"/&gt;
                 &lt;/controlAcceso&gt;
            &lt;/opcion&gt;
            &lt;opcion imagen="menu.gif" titulo="tOpcion2.2" descripcion="dOpcion2.2" url="URLOpcion2-1.php" /&gt;
            &lt;rama titulo="ramaL3" id="r3"&gt;
                &lt;controlAcceso&gt;
                    &lt;moduloPermitido id="COLORES"&gt;
                        &lt;valorModulo valor="ROJO" /&gt;
                        &lt;valorModulo valor="AZUL" /&gt;
                    &lt;/moduloPermitido&gt;
                &lt;/controlAcceso&gt;
                &lt;opcion imagen="menu.gif" titulo="google" descripcion="Buscador" url="http://www.google.es"/&gt;
            &lt;/rama&gt;
        &lt;/rama&gt;
    &lt;/modulo&gt;

&lt;/menu&gt;</pre>
                          </div>
                     
            </div>
            
                  
            <div class="section" title="3.3.1.2. Ejemplos con control de acceso">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1563"></a>3.3.1.2. Ejemplos con control de acceso
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <p>Ejemplo: Opci&oacute;n sin control de acceso.</p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting">&lt;opcion imagen="menu.gif" titulo="tOpcion2.2" descripcion="dOpcion2.2" url="URLOpcion2-1.php" /&gt;</pre>
                          </div>
               
                       
               <p>Ejemplo: Opci&oacute;n con control de acceso.</p>
               
                       
               <div class="informalexample">
                            <pre class="programlisting"> &lt;opcion imagen="menu.gif" titulo="tOpcion2.2" descripcion="dOpcion2.2" url="URLOpcion2-1.php"&gt;
    &lt;controlAcceso&gt;
        &lt;moduloPermitido id="COLORES"&gt;
                &lt;valorModulo valor="ROJO" /&gt;
                &lt;valorModulo valor="AZUL" /&gt;
        &lt;/moduloPermitido&gt;
     &lt;/controlAcceso&gt;
 &lt;/opcion&gt;</pre>
                          </div>
               
                       
               <p>En dicho nodo se incluye tanto el tratamiento de los roles de
                          usuario como el de los m&oacute;dulos.
               </p>
               
                       
               <div class="itemizedlist">
                  <ul class="itemizedlist" type="disc">
                     <li class="listitem">
                                    
                        <p><span class="bold"><strong>Rol</strong></span>: se hace uso de tantas
                                       etiquetas &lt;rolPermitido&gt; como roles puedan acceder a ese
                                       nodo, cada rol se identifica por el atributo valor.
                        </p>
                        
                                    
                        <p>Ejemplo:</p>
                        
                                    
                        <div class="informalexample">
                                         
                           
                                         <pre class="programlisting">&lt;opcion imagen="menu.gif" titulo="tOpcion2.2" descripcion="dOpcion2.2" url="URLOpcion2-1.php"&gt;
   &lt;controlAcceso&gt;
        &lt;rolPermitido valor="DESARROLLO_GVHIDRA" /&gt;
   &lt;/controlAcceso&gt;
&lt;/opcion&gt;</pre>
                                       </div>
                                  
                     </li>
                     <li class="listitem">
                                    
                        <p><span class="bold"><strong>M&oacute;dulo de acceso</strong></span>: Pueden
                                       imitar el comportamiento de los roles o ser m&aacute;s restrictivos. Si
                                       s&oacute;lo se especifica el m&oacute;dulo, los usuarios que lo tengan asignado
                                       podr&aacute;n acceder. Si adem&aacute;s se especifica una lista de valores, se
                                       comprobar&aacute; si el usuario tiene asignado un m&oacute;dulo, y si lo tiene,
                                       el valor del mismo debe aparecer entre los especificados.
                        </p>
                        
                                    
                        <p>Ejemplo: Opci&oacute;n con lista de valores, el usuario debe tener
                                       asignado el m&oacute;dulo COLORES y deber&aacute; tener uno de los dos valores,
                                       ROJO o AZUL para que se permita el acceso.
                        </p>
                        
                                    
                        <div class="informalexample">
                                         
                           
                                         <pre class="programlisting">&lt;opcion imagen="menu.gif" titulo="tOpcion2.2" descripcion="dOpcion2.2" url="URLOpcion2-1.php"&gt;
    &lt;controlAcceso&gt;          
        &lt;moduloPermitido id="COLORES"&gt;
            &lt;valorModulo valor="ROJO" /&gt;
            &lt;valorModulo valor="AZUL" /&gt;
        &lt;/moduloPermitido&gt;
    &lt;/controlAcceso&gt;
&lt;/opcion&gt;</pre>
                                       </div>
                                  
                     </li>
                  </ul>
               </div>
                     
            </div>
                
         </div>
         
             
         <div class="section" title="3.3.2. Opciones predefinidas para el menu">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a name="d4e1585"></a>3.3.2. Opciones predefinidas para el menu
                     </h3>
                  </div>
               </div>
            </div>
                  
            
                  
            <p>Opciones que pueden usarse en los ficheros xml de configuraci&oacute;n de
                     men&uacute;s, y que est&aacute;n implementadas en gvHidra.
            </p>
            
                  
            <div class="section" title="3.3.2.1. Manual de Usuario Gu&iacute;a de Estilo">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1588"></a>3.3.2.1. Manual de Usuario Gu&iacute;a de Estilo
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <p>Abre una ventana emergente donde se explica el funcionamiento
                          general de los distintos elementos de las aplicaciones realizadas con
                          gvHIDRA. Se recomienda colocar en el men&uacute; de herramientas o de
                          administraci&oacute;n.
               </p>
               
                       
               <div class="informalexample">
                            <pre class="programlisting">&lt;opcion titulo="Manual Gu&iacute;a de Estilo" descripcion="Manual de introducci&oacute;n a Gu&iacute;a de Estilo" 
        url="igep/doc/manualIGEP/indice/indice.html" imagen="menu/24.gif"
/&gt;</pre>
                          </div>
               
                       
               <p>Tambi&eacute;n hay disponible una gu&iacute;a r&aacute;pida:</p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting">&lt;opcion titulo="Gu&iacute;a R&aacute;pida" descripcion="Gu&iacute;a r&aacute;pida uso de aplicaciones" 
         url="igep/custom/cit.gva.es/doc/guiaRapida/guiaRapidaUsoAplicacionesCIT.pdf" 
         abrirVentana='true' imagen="menu/24.gif" 
 /&gt;</pre>
                          </div>
                     
            </div>
            
                  
            <div class="section" title="3.3.2.2. Consola de Log o Debug de la aplicaci&oacute;n">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1596"></a>3.3.2.2. Consola de Log o Debug de la aplicaci&oacute;n
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <p>Abre una ventana emergente para consultar la informaci&oacute;n
                          generada por la aplicaci&oacute;n. Se recomienda colocar en el men&uacute; de
                          herramientas, y con control de acceso para que no est&eacute; accesible a
                          usuarios.
               </p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting">&lt;opcion titulo="Log Aplicaci&oacute;n" descripcion="Log Aplicaci&oacute;n" 
        url="igep/_debugger.php" abrirVentana="true" imagen="menu/mensajes.gif"&gt;
   &lt;controlAcceso&gt;
      ...
   &lt;/controlAcceso&gt;
&lt;/opcion&gt;</pre>
                          </div>
                     
            </div>
            
                  
            <div class="section" title="3.3.2.3. Proteger contrase&ntilde;as">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1601"></a>3.3.2.3. Proteger contrase&ntilde;as
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <p>Abre una ventana emergente donde podemos obtener el hash de una
                          cadena (usados en servidores de web services). Se recomienda colocar
                          en el men&uacute; de herramientas, y con control de acceso para que no est&eacute;
                          accesible a usuarios.
               </p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting">&lt;opcion titulo="Proteger datos usando hash" descripcion="Proteger datos usando hash" 
        url="igep/include/igep_utils/protectdata.php" abrirVentana="true" imagen="menu/seguridad.gif"&gt;
   &lt;controlAcceso&gt;
      ...
   &lt;/controlAcceso&gt;
&lt;/opcion&gt;
</pre>
                          </div>
                     
            </div>
                
         </div>
         
             
         <div class="section" title="3.3.3. Autenticaci&oacute;n y autorizaci&oacute;n (m&oacute;dulos y roles)">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a name="d4e1606"></a>3.3.3. Autenticaci&oacute;n y autorizaci&oacute;n (m&oacute;dulos y roles)
                     </h3>
                  </div>
               </div>
            </div>
                  
            
                  
            <div class="section" title="3.3.3.1. Introducci&oacute;n">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1608"></a>3.3.3.1. Introducci&oacute;n
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <p>Los m&oacute;dulos y roles es la forma usada para controlar el acceso a
                          las distintas partes de un aplicaci&oacute;n. No hay que confundir estos
                          m&oacute;dulos con la etiqueta <span class="emphasis"><em>&lt;modulo&gt;</em></span> usados a
                          nivel de los men&uacute;s para agrupar funcionalidades.
               </p>
               
                       
               <div class="section" title="3.3.3.1.1. M&oacute;dulos">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h5 class="title"><a name="d4e1612"></a>3.3.3.1.1. M&oacute;dulos
                           </h5>
                        </div>
                     </div>
                  </div>
                            
                  
                            
                  <p>Los m&oacute;dulos representan permisos que un usuario tiene en una
                               aplicaci&oacute;n determinada. Los m&oacute;dulos se asignan cuando se lleva a
                               cabo una asociaci&oacute;n entre un usuario y una aplicaci&oacute;n, y se cargan
                               en el inicio de la aplicaci&oacute;n. Cada m&oacute;dulo tiene un c&oacute;digo, una
                               descripci&oacute;n y opcionalmente puede tener un valor. Cada usuario puede
                               tener asignado uno o varios m&oacute;dulos, y para cada uno puede modificar
                               su valor. Algunos usos habituales de m&oacute;dulos son el controlar si un
                               usuario puede acceder a una opci&oacute;n de men&uacute;, o si puede ver/editar un
                               campo determinado de una pantalla, o para guardar alguna informaci&oacute;n
                               necesaria para la aplicaci&oacute;n (departamento del usuario, a&ntilde;o de la
                               contabilidad, ...).
                  </p>
                  
                            
                  <p>Tambi&eacute;n suelen usarse para definir variables globales para
                               todos los usuarios, aunque en este caso es recomendable asignarlos a
                               roles (ver apartado siguiente).
                  </p>
                  
                            
                  <p>Ejemplo:</p>
                  
                            
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                         
                           <p>Todos los usuarios que consulten la aplicaci&oacute;n
                                            PRESUPUESTARIO deben tener el m&oacute;dulo M_CONSUL_PRESUPUESTARIO, es
                                            decir, nadie que no tenga ese m&oacute;dulo asociado podr&aacute; acceder al
                                            apartado de listados de la aplicaci&oacute;n
                           </p>
                                       
                        </li>
                     </ul>
                  </div>
                  
                            
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                         
                           <p>S&oacute;lo el personal de la oficina presupuestaria tendr&aacute;
                                            acceso a la manipulaci&oacute;n de datos, es decir el m&oacute;dulo
                                            M_MANT_PRESUPUESTARIO
                           </p>
                                       
                        </li>
                     </ul>
                  </div>
                  
                            
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                         
                           <p>S&oacute;lo t&eacute;cnicos y el jefe de la oficina presupuestaria
                                            tendr&aacute;n tendr&aacute;n acceso a la entrada de men&uacute; "control de
                                            cr&eacute;dito". Pues ser&aacute;n aquellos usuarios que tengan el m&oacute;dulo
                                            M_MANT_PRESUPUESTARIO, con el valor TECNICO o el valor
                                            JEFE.
                           </p>
                                       
                        </li>
                     </ul>
                  </div>
                  
                            
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                         
                           <p>Usuarios:</p>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>Sandra (Administrativa de otro departamento que
                                                         consulta la aplicaci&oacute;n): Tiene el m&oacute;dulo
                                                         M_CONSUL_PRESUPUESTARIO
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>Juan (Administrativo): Tiene el m&oacute;dulo
                                                         M_MANT_PRESUPUESTARIO, (bien sin valor, o con el valor
                                                         PERFIL_ADMD)
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>Pepe (T&eacute;cnico): Tiene el m&oacute;dulo M_MANT_PRESUPUESTARIO
                                                         con valor PERFIL_TECNICO
                                    </p>
                                                    
                                 </li>
                                 <li class="listitem">
                                                      
                                    <p>Pilar (Jefa de la oficina presupuestaria): Tiene el
                                                         m&oacute;dulo M_MANT_PRESUPUESTARIO con valor PERFIL_JEFE
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                                       
                        </li>
                     </ul>
                  </div>
                  
                            
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                         
                           <p>M&oacute;dulos:</p>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>Nombre: M_CONSUL_PRESUPUESTARIO</p>
                                    
                                                      
                                    <div class="itemizedlist">
                                       <ul class="itemizedlist" type="square">
                                          <li class="listitem">
                                                                   
                                             <p>Descripci&oacute;n: M&oacute;dulos de acceso a las consultas de
                                                                      la aplicaci&oacute;n de presupuestario
                                             </p>
                                                                 
                                          </li>
                                       </ul>
                                    </div>
                                    
                                                      
                                    <div class="itemizedlist">
                                       <ul class="itemizedlist" type="square">
                                          <li class="listitem">
                                                                   
                                             <p>Valores posibles: &lt;COMPLETAR&gt;</p>
                                                                 
                                          </li>
                                       </ul>
                                    </div>
                                                    
                                 </li>
                                 <li class="listitem">
                                                      
                                    <p>Nombre: M_MANT_PRESUPUESTARIO</p>
                                    
                                                      
                                    <div class="itemizedlist">
                                       <ul class="itemizedlist" type="square">
                                          <li class="listitem">
                                                                   
                                             <p>Descripci&oacute;n: M&oacute;dulos de acceso a las opciones de
                                                                      mantenimiento de la aplicaci&oacute;n de presupuestario
                                             </p>
                                                                 
                                          </li>
                                       </ul>
                                    </div>
                                    
                                                      
                                    <div class="itemizedlist">
                                       <ul class="itemizedlist" type="square">
                                          <li class="listitem">
                                                                   
                                             <p>Valores posibles: PERFIL_ADMD, PERFIL_TECNICO o
                                                                      PERFIL_JEFE
                                             </p>
                                                                 
                                          </li>
                                       </ul>
                                    </div>
                                                    
                                 </li>
                              </ul>
                           </div>
                                       
                        </li>
                     </ul>
                  </div>
                          
               </div>
               
                       
               <div class="section" title="3.3.3.1.2. Roles">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h5 class="title"><a name="d4e1660"></a>3.3.3.1.2. Roles
                           </h5>
                        </div>
                     </div>
                  </div>
                            
                  
                            
                  <p>Los roles representan el papel que el usuario desempe&ntilde;a en una
                               aplicaci&oacute;n y a diferencia de los m&oacute;dulos, cada usuario s&oacute;lo puede
                               tener uno y no tienen valor. &iquest;Entonces para que queremos los roles
                               si podemos hacer lo mismo usando m&oacute;dulos sin valor? Podemos ver los
                               m&oacute;dulos como los permisos b&aacute;sicos, y los roles como agrupaciones de
                               m&oacute;dulos. Realmente los roles se utilizan para facilitar la gesti&oacute;n
                               de usuarios. Si s&oacute;lo usamos m&oacute;dulos y por ejemplo tuvi&eacute;ramos 30
                               m&oacute;dulos, seria muy dif&iacute;cil clasificar a los usuarios ya que
                               seguramente cada uno tendr&iacute;a una combinaci&oacute;n distinta de m&oacute;dulos, y
                               cada vez que hubiera que dar de alta un usuario tendr&iacute;amos que tener
                               un criterio claro para saber cuales de los m&oacute;dulos asignar.
                  </p>
                  
                            
                  <p>Con roles es m&aacute;s simple, ya que es sencillo ver los permisos
                               de cualquier usuario (viendo el role suele ser suficiente), y para
                               a&ntilde;adir nuevos usuarios normalmente solo necesitaremos saber su role.
                               Para que esto sea f&aacute;cil de gestionar, tendr&iacute;amos que tener alg&uacute;n
                               mecanismo que nos permitiera asignar m&oacute;dulos a roles, y que los
                               usuarios con un rol "heredaran" estos m&oacute;dulos. Lo m&aacute;s flexible seria
                               tener esta informaci&oacute;n en tablas aunque tambi&eacute;n se podr&iacute;a empezar
                               haci&eacute;ndolo directamente en PHP (o ver abajo m&oacute;dulos
                               din&aacute;micos):
                  </p>
                  
                            
                  <div class="informalexample">
                                 
                     
                                 <pre class="programlisting">if ($role == 'admin') {
   // combinacion 1
   $modulos[] = array('borrarTodo'=&gt;array('descrip'=&gt;'borra todo',));
   $modulos[] = array('verTodo'=&gt;array('descrip'=&gt;'ver todo',));
   $modulos[] = array('opcion11'=&gt;array('descrip'=&gt;'opcion 11',));
   $modulos[] = array('opcion12'=&gt;array('descrip'=&gt;'opcion 12',));
   $modulos[] = array('opcion13'=&gt;array('descrip'=&gt;'opcion 13',));
   ...
} elseif ($role == 'gestor') {
   // combinacion 2
   $modulos[] = array('verTodo'=&gt;array('descrip'=&gt;'ver todo',));
   $modulos[] = array('opcion12'=&gt;array('descrip'=&gt;'opcion 12',));
   ...
} elseif ($role == '...') {
...</pre>
                               </div>
                  
                            
                  <p>De esta forma, a&ntilde;adir un nuevo usuario de tipo administrador
                               consistir&iacute;a simplemente en indicar su role, en vez de tener que
                               asignarle los N m&oacute;dulos que tienen los administradores.
                  </p>
                  
                            
                  <p>La soluci&oacute;n m&aacute;s flexible seria usar s&oacute;lo m&oacute;dulos para
                               controlar cualquier caracter&iacute;stica que pueda ser configurable por
                               usuario, y asignar los m&oacute;dulos a los roles de forma centralizada
                               (bien en base de datos o en el inicio de la aplicaci&oacute;n). Asi el
                               programador solo tendr&iacute;a que tratar con los m&oacute;dulos, y el analista
                               con los m&oacute;dulos de cada role.
                  </p>
                  
                            
                  <p>El ejemplo anterior usando roles podr&iacute;a ser:</p>
                  
                            
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                         
                           <p>m&oacute;dulos: M_CONSUL_PRESUPUESTARIO, M_MANT_PRESUPUESTARIO
                                            (ambos sin valor)
                           </p>
                                       
                        </li>
                        <li class="listitem">
                                         
                           <p>roles:</p>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>PERFIL_ADMD (m&oacute;dulo M_MANT_PRESUPUESTARIO), asignado a
                                                         Juan
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>PERFIL_TECNICO (m&oacute;dulo M_MANT_PRESUPUESTARIO),
                                                         asignado a Pepe
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>PERFIL_JEFE (m&oacute;dulo M_MANT_PRESUPUESTARIO), asignado a
                                                         Pilar
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                           
                                         
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                      
                                    <p>PERFIL_OTROS (m&oacute;dulo M_CONSUL_PRESUPUESTARIO),
                                                         asignado a Sandra
                                    </p>
                                                    
                                 </li>
                              </ul>
                           </div>
                                       
                        </li>
                     </ul>
                  </div>
                  
                            
                  <p>En este caso las dos soluciones tienen una complejidad
                               similar, aunque las diferencias ser&aacute;n m&aacute;s evidentes conforme
                               aumenten el n&uacute;mero de m&oacute;dulos y usuarios. Si por ejemplo
                               decidi&eacute;ramos que ahora todos los t&eacute;cnicos han de tener un nuevo
                               m&oacute;dulo X, sin usar roles tendr&iacute;amos que a&ntilde;adir ese m&oacute;dulo a todos
                               los usuarios que tuvieran el m&oacute;dulo M_MANT_PRESUPUESTARIO con valor
                               PERFIL_TECNICO; usando roles seria simplemente a&ntilde;adir el m&oacute;dulo X al
                               role PERFIL_TECNICO.
                  </p>
                          
               </div>
                     
            </div>
            
                  
            <div class="section" title="3.3.3.2. Uso en el framework">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a name="d4e1687"></a>3.3.3.2. Uso en el framework
                        </h4>
                     </div>
                  </div>
               </div>
                       
               
                       
               <p>El primer ejemplo de uso de m&oacute;dulos puede encontrarse en la
                          creaci&oacute;n de los ficheros xml que da lugar a la pantalla de inicio de
                          la aplicaci&oacute;n, en dichos ficheros se utiliza la etiqueta
                          "controlAcceso" para indicar que m&oacute;dulos necesita tener asignados un
                          usuario para acceder a la opci&oacute;n. Por ejemplo:
               </p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting">&lt;opcion titulo="Prueba del &aacute;rbol" descripcion="Probando el &aacute;rbol" 
        url="phrame.php?action=IgepPruebaArbol__iniciarVentana" imagen="menu/24.gif"&gt;
   &lt;controlAcceso&gt;
        &lt;moduloPermitido id="M_INTRANET"/&gt;
   &lt;/controlAcceso&gt;
&lt;/opcion&gt;</pre>
                          </div>
               
                       
               <p>Con el p&aacute;rrafo anterior de XML, se indica que la entrada de la
                          aplicaci&oacute;n "Prueba del &aacute;rbol" s&oacute;lo estar&aacute; disponible para aquellos
                          usuarios que cuenten entre sus m&oacute;dulos el M_INTRANET. Tambi&eacute;n se puede
                          hacer el control usando un role.
               </p>
               
                       
               <p>Los m&oacute;dulos podemos usarlos en otros sitios, y podemos acceder a
                          ellos a trav&eacute;s de los m&eacute;todos:
               </p>
               
                       
               <div class="table"><a name="d4e1694"></a><p class="title"><b>Tabla 3.1. Listado de M&eacute;todos 1</b></p>
                  <div class="table-contents">
                               
                     
                               
                     <table summary="Listado de M&eacute;todos 1" border="1">
                        <colgroup>
                           <col width="50%">
                           <col width="50%">
                        </colgroup>
                        <thead>
                           <tr>
                              <th align="center">m&eacute;todo</th>
                              <th align="center">descripci&oacute;n</th>
                           </tr>
                        </thead>
                        <tbody>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::hayModulo</strong></span>( &lt;modulo&gt;
                                                 )
                              </td>
                              <td>Devuelve un booleano indicando si el usuario tiene
                                                 asignado el m&oacute;dulo
                              </td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::dameModulo</strong></span>( &lt;modulo&gt;
                                                 )
                              </td>
                              <td>Informaci&oacute;n del m&oacute;dulo</td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>ComunSession::dameModulos</strong></span>()
                              </td>
                              <td>Todos los m&oacute;dulos (est&aacute;ticos) asignados al usuario (se
                                                 recomienda usar el m&eacute;todo con el mismo nombre de
                                                 IgepSession)
                              </td>
                           </tr>
                        </tbody>
                     </table>
                             
                  </div>
               </div><br class="table-break">
               
                       
               <p>Cuando queremos usar m&oacute;dulos que no est&eacute;n permanentemente
                          asignados a un usuario, sino que la asignaci&oacute;n dependa de otras
                          circunstancias que puedan ir cambiando durante la ejecuci&oacute;n de la
                          aplicaci&oacute;n, la asignaci&oacute;n no la haremos en el inicio de la aplicaci&oacute;n.
                          Para poder a&ntilde;adir o eliminar m&oacute;dulos en tiempo de ejecuci&oacute;n, y
                          conseguir, entre otras cosas el poder hacer accesibles u ocultar
                          opciones de men&uacute; din&aacute;micamente, podemos adem&aacute;s usar:
               </p>
               
                       
               <div class="table"><a name="d4e1715"></a><p class="title"><b>Tabla 3.2. Listado de M&eacute;todos 2</b></p>
                  <div class="table-contents">
                               
                     
                               
                     <table summary="Listado de M&eacute;todos 2" border="1">
                        <colgroup>
                           <col width="50%">
                           <col width="50%">
                        </colgroup>
                        <thead>
                           <tr>
                              <th align="center">m&eacute;todo</th>
                              <th align="center">descripci&oacute;n</th>
                           </tr>
                        </thead>
                        <tbody>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::anyadeModuloValor</strong></span>(
                                                 &lt;modulo&gt;, &lt;valor&gt;=null, &lt;descripcion&gt;=null
                                                 )
                              </td>
                              <td>A&ntilde;ade un nuevo m&oacute;dulo al usuario</td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::quitaModuloValor</strong></span>(
                                                 &lt;modulo&gt;, &lt;valor&gt;=null )
                              </td>
                              <td>Quita el m&oacute;dulo al usuario; si se le pasa valor, s&oacute;lo
                                                 lo quita si el valor del m&oacute;dulo coincide con el valor
                                                 pasado
                              </td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::hayModuloDinamico</strong></span>(
                                                 &lt;modulo&gt; )
                              </td>
                              <td>Devuelve un booleano indicando si el usuario tiene
                                                 asignado el m&oacute;dulo din&aacute;mico
                              </td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::dameModuloDinamico</strong></span>(
                                                 &lt;modulo&gt; )
                              </td>
                              <td>Informaci&oacute;n del m&oacute;dulo din&aacute;mico</td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::dameModulosDinamicos</strong></span>()
                              </td>
                              <td>Todos los m&oacute;dulos din&aacute;micos asignados al
                                                 usuario
                              </td>
                           </tr>
                           <tr>
                              <td><span class="bold"><strong>IgepSession::dameModulos</strong></span>()
                              </td>
                              <td>Todos los m&oacute;dulos asignados al usuario</td>
                           </tr>
                        </tbody>
                     </table>
                             
                  </div>
               </div><br class="table-break">
               
                       
               <p>Estos m&oacute;dulos les llamaremos m&oacute;dulos din&aacute;micos. A efectos del
                          framework, no hay diferencia entre los m&oacute;dulos cargados inicialmente y
                          los m&oacute;dulos din&aacute;micos. El plugin <span class="bold"><strong>CWPantallaEntrada</strong></span> ya incluye dicha
                          funcionalidad, por lo que si en alguno de los ficheros XML aparece una
                          opci&oacute;n como esta:
               </p>
               
                       
               <div class="informalexample">
                            <pre class="programlisting">&lt;opcion titulo="Prueba de m&oacute;dulo dinamico" 
      descripcion="Ejemplo de activaci&oacute;n y descativaci&oacute;n de opciones en ejecuci&oacute;n" 
      url="http://www.gvpontis.gva.es" imagen="menu/24.gif"&gt;
   &lt;controlAcceso&gt;
      &lt;moduloPermitido id="MD_GVA"/&gt;
   &lt;/controlAcceso&gt;
&lt;/opcion&gt;</pre>
                          </div>
               
                       
               <p>hasta que en alg&uacute;n punto de nuestro c&oacute;digo PHP no realicemos una
                          llamada como esta:
               </p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting"><span class="bold"><strong>IgepSession::anyadeModuloValor</strong></span>("MD_GVA")</pre>
                          </div>
               
                       
               <p>la opci&oacute;n permanecer&aacute; oculta.</p>
               
                       
               <p>Si despu&eacute;s de habilitarla queremos volver a ocultarla, basta con
                          ejecutar la opci&oacute;n:
               </p>
               
                       
               <div class="informalexample">
                            
                  
                            <pre class="programlisting"><span class="bold"><strong>IgepSession::quitaModuloValor</strong></span>("MD_GVA")</pre>
                          </div>
               
                       
               <p>Podemos obtener el role del usuario con el m&eacute;todo<span class="bold"><strong> IgepSession::dameRol()</strong></span>.
               </p>
               
                       
               <div class="note" title="Nota" style="margin-left: 0.5in; margin-right: 0.5in;">
                  <h3 class="title">Nota</h3>
                            
                  <p><span class="emphasis"><em>Restricciones en los men&uacute;s</em></span></p>
                  
                            
                  <p>Para que los cambios sean efectivos de forma visual en los
                               men&uacute;s, es necesario que se reinterprete el c&oacute;digo XML, cosa que s&oacute;lo
                               se hace cuando se pasa por la pantalla principal de la aplicaci&oacute;n,
                               mientras tanto NO ser&aacute; actualizada la visibilidad/invisibilidad de
                               las distintas ramas, m&oacute;dulos y/o opciones. Por tanto, convendr&aacute;
                               tambi&eacute;n a&ntilde;adir en las acciones que correspondan al men&uacute;,
                               comprobaci&oacute;n expl&iacute;cita de que se tienen los m&oacute;dulos/roles necesarios
                               para el acceso.
                  </p>
                          
               </div>
                     
            </div>
                
         </div>
           
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="ch03s02.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="ch03.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">3.2. Breve gu&iacute;a para crear una pantalla&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;3.4. Dise&ntilde;o de pantalla con smarty/plugins</td>
            </tr>
         </table>
      </div>
   </body>
</html>